#pragma once

enum ShaderType
{
	ShaderType_Vertex_Transforms = 0x0,
	ShaderType_Vertex_PassThrough = 0x1,
	ShaderType_Pixel_Diffuse = 0x2,
	ShaderType_Pixel_Brush = 0x3,
	ShaderType_Pixel_Mask = 0x4,
	ShaderType_Pixel_MaskAndBrush = 0x5,
};

enum BlendMode
{
	BlendMode_SourceOver = 0x0,
	BlendMode_SourceWrite = 0x1,
	BlendMode_Count = 0x2,
};

enum AddressEdgeMode
{
	AddressEdgeMode_Clamp = 0x0,
	AddressEdgeMode_Wrap = 0x1,
	AddressEdgeMode_Mirror = 0x2,
};

enum IndexBufferType
{
	IndexBuffer_AllGeometry = 0x0,
	IndexBuffer_InteriorGeometry = 0x1,
	IndexBuffer_EdgeGeometry = 0x2,
	IndexBuffer_Count = 0x3,
};


struct HWBatchState
{

	HWBatchState(const struct HWBatchState & other);
	HWBatchState(struct IPALSurface * pShapeAtlasTexture, struct IPALSurface * pBrushAtlasTexture , struct IXcpVideoFrameProvider * pMediaSource, enum ShaderType pixelShader, enum BlendMode blendMode, enum AddressEdgeMode addressEdgeMode, enum IndexBufferType indexBufferType);
	virtual ~HWBatchState();
	struct HWBatchState & operator=(const struct HWBatchState &);
	unsigned int IsBrushAtlasTextureEqual(const struct HWBatchState & other);
	unsigned int IsStateEqual(const struct HWBatchState & other);
	struct IPALSurface * m_pShapeAtlasTexture;
	struct IPALSurface * m_pBrushAtlasTexture;
	struct IXcpVideoFrameProvider * m_pMediaSource;
	XUINT32 m_hwMediaBatchInfoIndex;
	enum ShaderType m_pixelShader;
	enum BlendMode m_blendMode;
	enum AddressEdgeMode m_addressEdgeMode;
	enum IndexBufferType m_indexBufferType;

};
